package com.platinadesign.axa
{
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;

	/**
	 * 所有的MANAGER 由于继承了这个类，所以具有了和外部通信的能力，由于所有的管理者都不是显示对象，所以无法通过显示列表传递消息
	 * 所以就必须通过一个消息总线来传递消息，而这个基础类具有事件总线的实例，所以预先实现了这些功能，那么子类就可以直接调用了。
	 * @author DuMing
	 *
	 */
	public class BaseManager
	{
		private var _messageBus : MessageBus;

		public function BaseManager()
		{
			_messageBus = MessageBus.getInstance();
		}

		protected function addSystemListener( eventType : String, handler : Function ) : void
		{
			_messageBus.addEventListener( eventType, handler );
		}

		protected function addViewListener( eventType : String, handler : Function ) : void
		{
			_messageBus.stage.addEventListener( eventType, handler );
		}

		protected function remove( eventType : String, handler : Function ) : void
		{
			_messageBus.removeEventListener( eventType, handler );
		}
		protected function removeViewListener( eventType : String, handler :Function ) : void
		{
			_messageBus.stage.removeEventListener( eventType, handler );
		}

		protected function dispatch( event : Event ) : void
		{
			_messageBus.dispatchEvent( event );
		}
	}
}